{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         *\n",
      "        **\n",
      "       ****\n",
      "      ********\n",
      "     ****************\n",
      "    ********************************\n",
      "   ****************************************************************\n",
      "  ********************************************************************************************************************************\n",
      " ****************************************************************************************************************************************************************************************************************************************************************\n",
      "********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(num_rows):\n",
    "    triangle = []\n",
    "    \n",
    "    for i in range(num_rows):\n",
    "        # 初始化当前行的列表\n",
    "        row = [1] * (i + 1)\n",
    "        \n",
    "        # 计算中间的值\n",
    "        for j in range(1, i):\n",
    "            row[j] = triangle[i-1][j-1] + triangle[i-1][j]\n",
    "        \n",
    "        triangle.append(row)\n",
    "    \n",
    "    return triangle\n",
    " \n",
    "def print_pascals_triangle(triangle, max_width):\n",
    "    for row in triangle:\n",
    "        # 打印前导空格\n",
    "        print(' ' * (max_width - len(row)), end='')\n",
    "        \n",
    "        # 打印星号表示的元素\n",
    "        for num in row:\n",
    "            # 打印星号数量与数值成比例，这里为了简单每个非零元素用'*'表示\n",
    "            print('*' * num, end='')\n",
    "        \n",
    "        # 换行\n",
    "        print()\n",
    " \n",
    "def main():\n",
    "    num_rows = 10  # 你可以根据需要调整行数\n",
    "    triangle = generate_pascals_triangle(num_rows)\n",
    "    \n",
    "    # 计算最大宽度，以便对齐\n",
    "    max_width = len(triangle[-1])\n",
    "    \n",
    "    print_pascals_triangle(triangle, max_width)\n",
    " \n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                           *********                            \n",
      "                                         **         **                          \n",
      "                                        *             **                        \n",
      "                                      **                *                       \n",
      "                                     *                   *                      \n",
      "                                    *                     *                     \n",
      "                                   *                       *                    \n",
      "                                  *                         *                   \n",
      "                                 *                           *                  \n",
      "                                *                             *                 \n",
      "**                             *                               *                \n",
      "  *                           *                                 *               \n",
      "   *                         *                                   *              \n",
      "    *                       *                                     *             \n",
      "     *                     *                                       **           \n",
      "      *                  **                                          *          \n",
      "       *                *                                             *         \n",
      "        **             *                                               **       \n",
      "          **         **                                                  **     \n",
      "            *********                                                      *****\n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "import sys\n",
    "\n",
    "# 设置绘图参数\n",
    "width = 80  # 图形宽度\n",
    "height = 40  # 图形总高度（包括空白和波形）\n",
    "wave_height = 20  # 正弦波的实际高度（字符）\n",
    "amplitude = 10  # 正弦波的振幅（数学上的）\n",
    "x_scale = 0.1  # x轴缩放比例（根据字符宽度调整）\n",
    "y_offset = height // 2 - wave_height // 2  # y轴偏移，使波形居中\n",
    "\n",
    "# 计算y轴缩放比例\n",
    "y_scale = wave_height / (2 * amplitude)\n",
    "\n",
    "# 创建一个空的二维字符数组来存储图形（包括空白）\n",
    "graph = [[' ' for _ in range(width)] for _ in range(height)]\n",
    "\n",
    "# 绘制正弦波\n",
    "for x in range(width):\n",
    "    # 将x坐标转换为0到2π之间的值（或根据需要调整范围）\n",
    "    theta = x * x_scale\n",
    "    # 如果需要，可以限制theta的范围，例如使用theta = math.fmod(theta, 2 * math.pi)\n",
    "    \n",
    "    # 计算正弦波的高度（数学上的）\n",
    "    y_math = amplitude * math.sin(theta)\n",
    "    \n",
    "    # 将数学上的高度映射到字符数组的行索引\n",
    "    y_char = int(y_offset + y_math * y_scale)  # 确保y_char在有效范围内\n",
    "    \n",
    "    # 确保索引在有效范围内，并且考虑取整可能导致的越界\n",
    "    if 0 <= y_char < height:\n",
    "        # 将字符绘制到图形中\n",
    "        graph[y_char][x] = '*'\n",
    "\n",
    "# 打印图形\n",
    "for row in graph:\n",
    "    sys.stdout.write(''.join(row))\n",
    "    sys.stdout.write('\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x234d8c165d0>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: C\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "  if score >= 90:\n",
    "    return 'A'\n",
    "  elif score >= 80:\n",
    "    return 'B'\n",
    "  elif score >= 70:\n",
    "    return 'C'\n",
    "  elif score >= 60:\n",
    "    return 'D'\n",
    "  else:\n",
    "    return 'F'\n",
    "\n",
    "def main():\n",
    "  try:\n",
    "    score = float(input(\"请输入成绩（0-100）: \"))\n",
    "    if not 0 <= score <= 100:\n",
    "      print(\"成绩必须在0到100之间。\")\n",
    "    else:\n",
    "      grade = determine_grade(score)\n",
    "      print(f\"你的等级是: {grade}\")\n",
    "  except ValueError:\n",
    "    print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "  main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      *\n",
      "     ***\n",
      "    *****\n",
      "   *******\n",
      "  *********\n",
      " ***********\n",
      "*************\n",
      "  **\n",
      "  **\n"
     ]
    }
   ],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * trunk_space + '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,6*np.pi)\n",
    "plt.plot(x,np.sin(x),x,np.cos(x))\n",
    "import graphviz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "invalid literal for int() with base 10: ''",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[27], line 14\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;124;03m企业发放的奖金根据利润提成。\u001b[39;00m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;124;03m利润(I)低于或等于10万元时，奖金可提10%；\u001b[39;00m\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m     10\u001b[0m \u001b[38;5;124;03m从键盘输入当月利润I，求应发放奖金总数？\u001b[39;00m\n\u001b[0;32m     11\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[0;32m     13\u001b[0m profit \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m---> 14\u001b[0m I \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mint\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mplease input: \u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     15\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m(I\u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m     16\u001b[0m     profit \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.1\u001b[39m \u001b[38;5;241m*\u001b[39m I\n",
      "\u001b[1;31mValueError\u001b[0m: invalid literal for int() with base 10: ''"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 7.0.1 (20221109.1506)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"208pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 208.12 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 204.12,-472 204.12,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-468 73.06,-468 73.06,-432 127.06,-432 127.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-446.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"200.18,-396 40.91,-396 -0.06,-360 159.21,-360 200.18,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-374.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-431.7C100.06,-424.41 100.06,-415.73 100.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-407.62 100.06,-397.62 96.56,-407.62 103.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"143.06,-324 57.06,-324 57.06,-288 143.06,-288 143.06,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-302.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-359.7C100.06,-352.41 100.06,-343.73 100.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-335.62 100.06,-325.62 96.56,-335.62 103.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"152.56,-252 47.56,-252 47.56,-216 152.56,-216 152.56,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-287.7C100.06,-280.41 100.06,-271.73 100.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-263.62 100.06,-253.62 96.56,-263.62 103.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"165.56,-180 34.56,-180 34.56,-144 165.56,-144 165.56,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-215.7C100.06,-208.41 100.06,-199.73 100.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-191.62 100.06,-181.62 96.56,-191.62 103.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-108 73.06,-108 73.06,-72 127.06,-72 127.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-143.7C100.06,-136.41 100.06,-127.73 100.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-119.62 100.06,-109.62 96.56,-119.62 103.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-36 73.06,-36 73.06,0 127.06,0 127.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-71.7C100.06,-64.41 100.06,-55.73 100.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-47.62 100.06,-37.62 96.56,-47.62 103.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x20baea4e410>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "< img src=\".//R-C.jpg\" width=\"150 \" alt=\"肥嘟嘟左卫门\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''''''''''',o%$W(*M%$$$$$$@&*aI'''\"1l''''''''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''''''w$$$$$$$#$$$$$$$$$$$$$@M$$$$$Wi'''''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''''>B$$$$$$$$$8&B$$$$$$$$$W$$$$$$$$$M''''''''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''''''k$$$$$$$%$$$$&+++_+)b*M$$$$$$$$$$$$M'''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''*$$$$$#~++_$$$$*++++++b$$$$$$*%$*$$$$o''''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''''$$$$8-+++++_8$$8~+++++*$$$$o+~*%$o$$$$\\'''''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''''I*$@0+++++++++#*+++++++-W8a~++++_)##$$$W'''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''`1+++++X#o**{_++++++++++++++}mhp]+++~%$$B'''''''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''''''''''''*+~+_o++~++~+[|+++++++++~?b++++++_*~++W$#&''''''''''''''''''''''''''''\n",
      ".''''''''''''''''''''''''''''''''''''''`++++Q++++++++++w++++++++*+++++++++++C++_$$o'''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''o+++q++++++++++++_++++++#+++++++++++++a++#$$0''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''*++q+++++1d#h\\+++#+++++q_++++++++++++++~+k$$$''''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''d+++++-*$$$$$$$#+++++++-++++_*@$$$$#u++++_$$$#'''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''''''''''q++++#$$$$$$$$$$$_+++++++++M$$$$$$$$$%++++@$$$`''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''''`#kr)XoZa+++a$$$$$***$$$$#+++++++~*$$$$@WW$$$$&+++*$$$*''''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''!J++++++++++++@$$$M    \"$$$B+++++++u$$$$'   .#$$$O++a$$$@''''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''*++++++++++++++$$$$w    .@$$@+++++++M$$$v     r$$$#++-$$$$]'''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''f+++++++++++++++B$$$8\" ..#$$$*+++++++M$$$*     *$$$*+++B$$$*`''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''Z++++++++++++++++Q$$$$$$$$$$$@~++++++++$$$$$Mo#$$$$@++++*$$$&'''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''*++++++++++++++++++)%$$$$$$$$#+~++++++++1@$$$$$$$$$B-++++p$$##*''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''_+++++++++++++++++++++o#MM#O++++++++++++++]aW$$$8*v_+++++-0+~+++0^'''''''''''''''''''\n",
      "''''''''''''''''''''''''a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++(++++++_}`''''''''''''''''''\n",
      "''''''''''''''''''''''''w++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*''''''''''''''''''\n",
      "''''''''''''''''''''''''?++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++_''''''''''''''''''\n",
      "''''''''''''''''''''''''++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++c'''''''''''''''''\n",
      ".'''''''''''''''''''''''~+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*'''''''''''''''''\n",
      "''''''''''''''''''''''''(+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++a'''''''''''''''''\n",
      "''''''''''''''''''''''''o+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++:'''''''''''''''''\n",
      "''''''''''''''''''''''''z++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++q''''''''''''''''''\n",
      "'''''''''''''''''''''''''n++++++++++++++++++++++++++++++++++++++++++++++++++++++Oq++++++++|'''''''''''''''''''\n",
      "'''''''''''''''''''''''''f++++++++++++++++++++++++++++++++++++++++++++++++++-*>'''*/++++_#''''''''''''''''''''\n",
      "''''''''''''''''''''''''''o++++++++++++++++++++++++++++++++++++++++++++++-#dmmmqa*f';UO-''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''#++++++++++++++++++{owa+++++++++++++++++++_d*wmmmmmmmmmmZdv^'''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''h~+++++++++++++++ammm*++++++++++++++++q#pwmmmmmmmmmmmmmmmm#'''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''^Q+++++++++++++0wmmm#++++++++++++m#pmmmmZmmmmmmmmmmmmmmmmmO''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''Lmda+++++++++++dmmmh_++++++~f*owmmmmmmmmmmmmmmmmmmmmmmmmmm#''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''#mmmmdML++++++dmmmw?+~u**kwmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm*''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''*mmmmmmmmmwqbh*mmwbwmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm*''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''*mmmmmmmmZmmmmmahmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmo''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''#mmmmmmmmZmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm#''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''#mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmo''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''UwmmmmmmmmmmmmmmmmmmmmmmmmmmmZmmmmmmmmmmmmmmmmmmmmmmmmmmmmL''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''immmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"''''''''''''''''''''''\n",
      "'''''''''''''''''''''''''''''`Zmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''mmmmmmhmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmk'''''''''''''''''''''''\n",
      "''''''''''''''''''''''''''''''wmmmmmommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm#'''''''''''''''''''''''\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\赵文煊\\AppData\\Local\\Temp\\ipykernel_33080\\3396828023.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "pic=plt.imread('R-C.jpg')\n",
    "pic = plt.imread(\".\\\\R-C.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
